package cn.iocoder.yudao.module.system.controller.admin.ai.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * AI智能选志愿请求 VO
 *
 * @author 芋道源码
 */
@Schema(description = "管理后台 - AI智能选志愿请求 VO")
@Data
public class AiVolunteerRecommendReqVO {

    // ========== 分页参数 ==========
    @Schema(description = "页码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "页码不能为空")
    @Min(value = 1, message = "页码最小值为 1")
    private Integer pageNum;

    @Schema(description = "每页条数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
    @NotNull(message = "每页条数不能为空")
    @Min(value = 1, message = "每页条数最小值为 1")
    @Max(value = 100, message = "每页条数最大值为 100")
    private Integer pageSize;

    // ========== 基础参数 ==========
    @Schema(description = "年份", requiredMode = Schema.RequiredMode.REQUIRED, example = "2025")
    @NotNull(message = "年份不能为空")
    private Integer year;

    @Schema(description = "省份", requiredMode = Schema.RequiredMode.REQUIRED, example = "安徽")
    @NotBlank(message = "省份不能为空")
    private String province;

    @Schema(description = "高考总分", requiredMode = Schema.RequiredMode.REQUIRED, example = "642")
    @NotNull(message = "高考总分不能为空")
    @Min(value = 0, message = "分数不能为负数")
    @Max(value = 900, message = "分数不能超过900")
    private Integer score;

    @Schema(description = "省内位次", example = "6404")
    private Integer ranks;

    @Schema(description = "录取批次", example = "本科批")
    private String batch;

    @Schema(description = "考生类型：1-普通类，2-艺术类，3-体育类", example = "1")
    private Integer entrantType;

    // ========== 选科参数 ==========
    @Schema(description = "选科组合（逗号分隔）", example = "物理,生物,地理")
    private String subjects;

    @Schema(description = "可选科目（逗号分隔）", example = "物理,生物,地理")
    private String optional;

    @Schema(description = "考试类型/科类", requiredMode = Schema.RequiredMode.REQUIRED, example = "物理")
    @NotBlank(message = "考试类型不能为空")
    private String classify;

    @Schema(description = "要求科目")
    private String requiredSubjects;

    @Schema(description = "选科类型")
    private String gradeType;

    // ========== 艺术类参数 ==========
    @Schema(description = "艺术类别", example = "美术与设计类")
    private String artCategory;

    @Schema(description = "艺术分数", example = "350")
    private Integer artScore;

    @Schema(description = "艺术排名", example = "1500")
    private Integer artRank;

    // ========== 分数区间参数 ==========
    @Schema(description = "最低分数", example = "607")
    private Integer minScore;

    @Schema(description = "最高分数", example = "652")
    private Integer maxScore;

    @Schema(description = "大分差", example = "10")
    private Integer bigScoreDiff;

    // ========== 学费参数 ==========
    @Schema(description = "最低学费", example = "5000")
    private Integer minStudyCost;

    @Schema(description = "最高学费", example = "15000")
    private Integer maxStudyCost;

    // ========== 专业筛选参数 ==========
    @Schema(description = "专业名称（指定专业）")
    private String major;

    @Schema(description = "包含的专业ID（逗号分隔）", example = "1,2,3")
    private String include;

    @Schema(description = "排除的专业ID（逗号分隔）", example = "5")
    private String exclude;

    @Schema(description = "专业大类")
    private String majorClass;

    @Schema(description = "一级学科名称列表")
    private List<String> firstMajorNames;

    @Schema(description = "职业名称")
    private String occName;

    @Schema(description = "职业功能名称")
    private String functionName;

    @Schema(description = "职业功能名称列表")
    private List<String> functionNames;

    // ========== 学校筛选参数 ==========
    @Schema(description = "学校名称（支持模糊查询）", example = "清华大学")
    private String universityName;

    @Schema(description = "城市列表")
    private List<String> citys;

    @Schema(description = "省份列表")
    private List<String> provinces;

    @Schema(description = "学校性质")
    private String property;

    @Schema(description = "学校性质名称", example = "公办")
    private String propertyName;

    @Schema(description = "学校类别")
    private String category;

    @Schema(description = "学校类别名称", example = "综合")
    private String categoryName;

    @Schema(description = "学校标签")
    private String universityTag;

    @Schema(description = "学校标签名称列表")
    private List<String> universityTagNames;

    @Schema(description = "学校层次")
    private String universityLevel;

    // ========== 推荐类型过滤 ==========
    @Schema(description = "推荐类型：CHONG-冲，WEN-稳，BAO-保", example = "CHONG")
    private String type;
}

